package com.jk.controller;

import com.jk.pojo.PayBank;
import com.jk.pojo.PayUser;
import com.jk.service.WalletService;
import com.jk.util.ChangLiang;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * 钱包controller控制层
 * 李亚峰
 */
@RestController
@RequestMapping("wallet")
public class WalletController {

    @Autowired
    private WalletService walletService;
    /**
     * 查询用户余额
     * 李亚峰
     */
    @GetMapping("queruUserWallet")
    public Map<String,Double> queruUserWallet(HttpServletRequest request){
        /**登录成功后获取session里面的用户信息*/
        PayUser user = (PayUser)request.getSession().getServletContext().getAttribute("us");
        /**查询出用户账户*/
        String useraccount= user.getUseraccount();
        /**根据用户账户查询其余额*/
        PayUser dbuser = walletService.queryUserBalance(useraccount);
        Double userBalance = dbuser.getUserbalance();
        Map<String,Double> map = new HashMap<String,Double>();
        map.put("dbuser",userBalance);
        return map;
    }

    /**
     *根据登录的用户信息查询出该用户的银行卡号  前台进行回显
     */
      @GetMapping("selectBankNum")
      public Map<String,String> selectBankNum(HttpServletRequest request){
          PayUser user = (PayUser) request.getSession().getServletContext().getAttribute("us");
          Map<String,String> map = new HashMap<String,String>();
          String userid = user.getUserid();
          String bankNum = walletService.selectBankNum(userid);
          map.put("bankNum",bankNum);

          return map;
      }


    /**
     * 查询银行卡余额
     * 李亚峰
     */
    @GetMapping("queryBankMoney")
    public Map<String,Double> queryBankMoney(String bankNum){
        /**根据银行卡账号查询银行余额*/
        PayBank payBank = walletService.queryBankMoney(bankNum);
        Map<String,Double> map = new HashMap<String,Double>();
        map.put("Bankmoney",payBank.getBankmoney());
        return map;
    }

    /**
     * 判断银行卡密码是否输入正确
     * 李亚峰
     */
    @GetMapping("QueruBankPwd")
    public Map<String,Integer> QueruBankPwd(String bankNum,String bankPwd){
        String message = ChangLiang.USER_INTTIAL;
        int flag = walletService.QueruBankPwd(bankNum,bankPwd);
        Map<String,Integer> map = new HashMap<String, Integer>();
        if(flag==ChangLiang.BANKPWD_SUCCESS){
            map.put("flag",flag);
        }else{
            map.put("flag",flag);
        }
        map.put("flag",flag);
        return map ;
    }

    /**
     * 判断支付宝账号密码是否正确
     * 李亚峰
     */
    @GetMapping("QueruUserPaymentPwd")
    public Map<String,Integer> QueruUserPaymentPwd(String paymentPwd,HttpServletRequest request){
        /**获取作用域session里面的用户信息*/
        PayUser user= (PayUser) request.getSession().getServletContext().getAttribute("us");
        /**获取用户账号*/
        String useraccount = user.getUseraccount();
        /**验证账号密码是否正确*/
        Map<String,Integer> map = new HashMap<String, Integer>();
        int flag = walletService.QueruUserPaymentPwd(useraccount,paymentPwd);
        if(flag==ChangLiang.BANKPWD_SUCCESS){
            map.put("flag",flag);
        }else{
            map.put("flag",flag);
        }
        map.put("flag",flag);
        return map ;
    }

    /**
     * 充值到余额  修改  修改用户表里面的余额和银行表里的余额
     * 李亚峰
     */
    @PutMapping("rechargeToUserBalanc")
    public Map<String,String> rechargeToUserBalanc(Double Money,String bankNum,HttpServletRequest request){
        /**登录成功后获取session里与用户信息*/
        PayUser user = (PayUser) request.getSession().getServletContext().getAttribute("us");
        /**获取账户*/
        String useraccount= user.getUseraccount();

        int information = walletService.rechargeToUserBalanc(Money,bankNum,useraccount);
        String message = ChangLiang.USER_INTTIAL;
        if(information>ChangLiang.USER_INFORMATION){
            message="充值成功";
        }else{
            message="充值失败";
        }
        Map<String,String> map = new HashMap<String, String>();
        map.put("message",message);
        return map;
    }

    /**
     *提现功能  提取余额到银行卡   首先要在前台判断提取金额是否大于现有余额
     * 查询现有余额  直接调用上面查询用户余额方法 如果余额满足 进行提现功能
     * 李亚峰
     */
    @PutMapping("withdrawUserBalanc")
    public Map<String,String> withdrawUserBalanc(Double Money,String bankNum,HttpServletRequest request){
        /**登录成功后获取session里与用户信息*/
        PayUser user = (PayUser) request.getSession().getServletContext().getAttribute("us");
        /**获取账户*/
        String useraccount= user.getUseraccount();

        int flag =  walletService.withdrawUserBalanc(Money,bankNum,useraccount);
        String message=ChangLiang.USER_INTTIAL;
        if(flag>ChangLiang.USER_INFORMATION){
            message="提现成功 请注意查收到账信息！";
        }else{
            message="提现失败";
        }
        Map<String,String> map =new HashMap<String, String>();
        map.put("message",message);
        return map;
    }

    /**
     * 转账到别人支付宝  传过来三个参数  金额  转账到的用户账号  和转账备注说明
     * 前台先判断转账金额是否大于现有余额  如果有足够的余额才可以进行转账操作
     * 查询现有余额  直接调用上面查询用户余额方法
     * 李亚峰
     */
    @PutMapping("transferToUserBalanc")
    public Map<String,String> transferToUserBalanc(Double Money,String UserNumber,String remark,HttpServletRequest request){
        /**首先获取登录时的用户信息*/
        PayUser user = (PayUser) request.getSession().getServletContext().getAttribute("us");
        /**获取账户*/
       String useraccount= user.getUseraccount();
        /**转账功能到用户账号控制层*/
        int flag =  walletService.transferToUserBalanc( Money , UserNumber , useraccount);
        String message=ChangLiang.USER_INTTIAL;
        if(flag>ChangLiang.USER_INFORMATION){
            message = "转账成功！";
        }else {
            message="转账失败！";
        }
        Map<String,String> map = new HashMap<String, String>();
        map.put("message",message);
        return map;
    }

    /**
     * 首先查询用户余额 走上面查询余额方法
     * 转账到银行卡  前台判断余额是否大于转账金额  如果大于  则走转账方法
     * 李亚峰
     */
    @PutMapping("transferToBankMoney")
    public Map<String,String> transferToBankMoney(Double money,String bankNum,String remark,HttpServletRequest request){
        /**首先获取登录时的用户信息*/
       PayUser user = (PayUser) request.getSession().getServletContext().getAttribute("us");
        /**获取账户*/
        String useraccount= user.getUseraccount();
        /**转账功能到银行卡*/
        int flag =  walletService.transferToBankMoney(money,bankNum,useraccount);
        String message =ChangLiang.USER_INTTIAL;
        if(flag>ChangLiang.USER_INFORMATION){
            message="转账成功，请留意银行到账信息！";
        }else{
            message="转账失败！";
        }
        Map<String,String> map = new HashMap<String,String>();
        map.put("message",message);
        return map;
    }
}
